from openai import OpenAI
import json
from utils.logger import setup_logger
from config.settings import DEEPSEEK_API_KEY, DEEPSEEK_BASE_URL

logger = setup_logger(__name__)

class LPRAnalyzer:
    def __init__(self):
        if not DEEPSEEK_API_KEY or DEEPSEEK_API_KEY == '':
            logger.error("未设置有效的Deepseek API密钥")
            raise ValueError("请设置环境变量 DEEPSEEK_API_KEY 或在配置文件中提供有效的API密钥")
        
        self.client = OpenAI(
            api_key=DEEPSEEK_API_KEY,
            base_url=DEEPSEEK_BASE_URL
        )

    def analyze_lpr_content(self, content):
        """分析LPR内容并提取关键信息"""
        try:
            logger.info("开始分析LPR内容")
            
            response = self.client.chat.completions.create(
                model="deepseek-chat",
                messages=[
                    {
                        "role": "system",
                        "content": """
                        你是金融数据分析师，请仔细分析文本内容，提取以下信息：
                        1. 文章发布日期
                        2. 1年期LPR数值（以百分比形式）
                        3. 5年期LPR数值（以百分比形式）
                        
                        请以下面的JSON格式返回，只返回JSON数据：
                        {
                            "publish_date": "YYYY-MM-DD",
                            "one_year_lpr": "X.XX%",
                            "five_year_lpr": "X.XX%"
                        }
                        """
                    },
                    {
                        "role": "user",
                        "content": content
                    }
                ],
                temperature=0.1
            )
            
            result = response.choices[0].message.content.strip()
            
            # 处理可能的markdown格式
            if result.startswith("```json"):
                result = result[7:-3]
            
            parsed_result = json.loads(result)
            logger.info("LPR内容分析完成")
            return parsed_result
            
        except Exception as e:
            logger.error(f"AI分析过程中发生错误: {str(e)}")
            return None 